1 矢量分析
使用SDK进行空间分析总体思路较为简单:
下面以创建缓冲区为例,说明一下核心代码思路。
MapPoint point = new MapPoint(0,0);//创建一个Geometry
Geometry result = GeometryEngine.Buffer(point,10);//调用创建缓冲区方法
如此就能得到缓冲区的结果了,再参考2 符号绘制及符号系统 > 2.1 自行编程绘制类似的过程,根据得到的Geometry对象创建一个Graphic,添加至GraphicOverlay里面,再添加至MapView的GraphicOverlays里即可实现在地图上的显示。
如果是其他的分析方法,相应把方法名、参数、结果改改就能用了,常用的方法还有判断是否相交Intersects、裁剪Clip、联合Union、求相交部分Intersection、判断是否接触Touches、简化Simplify等,根据常理逻辑即可推断出使用方法,无需全部记忆。
本部分主要围绕FeatureTable类来实现对某一个要素的删除、新增、修改,相当于ArcGIS里面在属性表里面删除一行、修改一个属性或者在编辑工具中创建一个要素,操作逻辑也是大差不差的。
FeatureTable featureTable = featureLayer.FeatureTable;
featureTable.DeleteFeatureAsync(targetFeature);
FeatureTable featureTable = featureLayer.FeatureTable;
Feature feature = featureTable.CreateFeature();
feature.Geometry = new MapPoint(0,0);
feature.SetAttributeValue("Name", "test");//两个参数对应着属性名、属性值
await featureTable.AddFeatureAsync(feature);
SetAttributeValue修改属性表中的值,也可以直接设置Geometry属性来修改几何UpdateFeatureAsync方法更新Feature targetFeature = (Feature)identifyResult.GeoElements[0];
targetFeature.SetAttributeValue("Name", "modify-test");//两个参数对应着属性名、属性值
featureLayer.FeatureTable.UpdateFeatureAsync(targetFeature);
Esri没有像矢量分析一样为栅格分析各工具都创建相应的方法以供直接调用,而是使用JSON字符串去定义处理方法和处理参数,步骤如下:
FromJson方法传入JSON字符串初始化一个RasterFunction对象aspectJson =//定义坡向函数参数的JSON字符串
@"{
""raster_function_arguments"":
{
""type"":""Raster_function_arguments"",
""raster"":{ ""name"":""raster"",""is_raster"":true,""type"":""Raster_function_variable""}
},
""raster_function"":{ ""type"":""Aspect_function""},
""type"":""Raster_function_template""
}";
核心代码
RasterFunction rasterFunction = RasterFunction.FromJson(aspectJson);
RasterFunctionArguments rasterFunctionArguments = rasterFunction.Arguments;
IReadOnlyList<string> myRasterNames = rasterFunctionArguments.GetRasterNames();
rasterFunctionArguments.SetRaster(myRasterNames.First(), currentRasterLayer.Raster);
Raster newRaster = new Raster(rasterFunction);
获得newRaster对象后可以以此新建一个RasterLayer对象,然后添加到MapView的OperationalLayers中即可在地图上显示处理结果。